রুবি একটি ফাংশনাল প্রোগ্রামিং প্যারাডাইমের কিছু ধারণা সমর্থন করে, যেমন map, select, এবং reduce মেথড। এই মেথডগুলি কোলেকশন (যেমন অ্যারে বা হ্যাশ) নিয়ে কাজ করার জন্য ব্যবহৃত হয়, এবং এগুলি কোডকে আরও পরিষ্কার, সংক্ষিপ্ত এবং কার্যকরী করে তোলে। নিচে এই তিনটি মেথডের ব্যবহার বিস্তারিতভাবে আলোচনা করা হয়েছে।
১. map Method
map মেথড একটি কোলেকশনের প্রতিটি উপাদানকে ট্রান্সফর্ম (পরিবর্তন) করার জন্য ব্যবহৃত হয় এবং এর ফলস্বরূপ একটি নতুন কোলেকশন তৈরি করে, যেখানে প্রতিটি উপাদান নতুন মানে পরিবর্তিত হয়।
Syntax:
array.map { |element| # block code }এখানে, প্রতিটি উপাদান element হিসেবে মাপ করা হয় এবং ব্লক কোডের মাধ্যমে নতুন মান তৈরি হয়।
উদাহরণ:
numbers = [1, 2, 3, 4, 5]
squared_numbers = numbers.map { |num| num ** 2 }
puts squared_numbers # Output: [1, 4, 9, 16, 25]এখানে, map মেথডটি প্রতিটি সংখ্যাকে তার স্কয়ারে রূপান্তর করছে এবং নতুন অ্যারে squared_numbers তৈরি হচ্ছে।
আরেকটি উদাহরণ (স্ট্রিংয়ের সব অক্ষরকে বড় করা):
words = ["ruby", "rails", "developer"]
capitalized_words = words.map { |word| word.capitalize }
puts capitalized_words # Output: ["Ruby", "Rails", "Developer"]এখানে, map মেথডটি প্রতিটি স্ট্রিংয়ের প্রথম অক্ষরকে বড় করে নতুন অ্যারে তৈরি করছে।
২. select Method
select মেথড একটি কোলেকশনের মধ্যে থেকে নির্দিষ্ট শর্ত মেনে উপাদানগুলো ফিল্টার করে একটি নতুন কোলেকশন তৈরি করে। এটি শুধুমাত্র সেই উপাদানগুলো রাখে যেগুলি ব্লক শর্ত পূর্ণ করে।
Syntax:
array.select { |element| # condition }উদাহরণ:
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = numbers.select { |num| num.even? }
puts even_numbers # Output: [2, 4, 6]এখানে, select মেথডটি শুধুমাত্র সেগুলিকে ফিরিয়ে দিয়েছে যেগুলি even (জোড়া সংখ্যা) ছিল।
আরেকটি উদাহরণ (বয়সের ভিত্তিতে নির্বাচন):
people = [
{ name: "Alice", age: 25 },
{ name: "Bob", age: 30 },
{ name: "Charlie", age: 17 },
{ name: "David", age: 22 }
]
adults = people.select { |person| person[:age] >= 18 }
puts adults.inspect # Output: [{:name=>"Alice", :age=>25}, {:name=>"Bob", :age=>30}, {:name=>"David", :age=>22}]এখানে, select মেথডটি মাত্র তাদের মানুষদের ফিরিয়ে দিয়েছে যাদের বয়স ১৮ বা তার বেশি।
৩. reduce Method
reduce (যাকে inject নামেও পরিচিত) একটি কোলেকশনের উপর একটি অ্যাকুমুলেটর (accumulator) প্রক্রিয়া চালানোর জন্য ব্যবহৃত হয়। এটি কোলেকশনের প্রতিটি উপাদানকে একটি একক মানে পরিণত করে (যেমন যোগফল, গুণফল ইত্যাদি)।
Syntax:
array.reduce(initial_value) { |accumulator, element| # block code }initial_value: অ্যাকুমুলেটরের শুরুর মান (এটি ঐচ্ছিক)।accumulator: এটি সঞ্চিত মান (এটি প্রথমেinitial_valueথেকে শুরু হয়)।element: এটি কোলেকশনের প্রতিটি উপাদান।
উদাহরণ:
numbers = [1, 2, 3, 4, 5]
sum = numbers.reduce(0) { |accumulator, num| accumulator + num }
puts sum # Output: 15এখানে, reduce মেথডটি অ্যারে numbers এর সমস্ত সংখ্যার যোগফল বের করছে, যেখানে 0 হচ্ছে initial_value (অ্যাকুমুলেটরের প্রাথমিক মান)। প্রতিটি উপাদানকে অ্যাকুমুলেটরের সাথে যোগ করা হয়েছে।
আরেকটি উদাহরণ (গুণফল বের করা):
numbers = [1, 2, 3, 4, 5]
product = numbers.reduce(1) { |accumulator, num| accumulator * num }
puts product # Output: 120এখানে, reduce মেথডটি সমস্ত সংখ্যার গুণফল বের করছে, যেখানে 1 হচ্ছে initial_value।
আরেকটি উদাহরণ (হাইস্ট ভ্যালু বের করা):
numbers = [1, 9, 3, 7, 5]
max_value = numbers.reduce { |accumulator, num| accumulator > num ? accumulator : num }
puts max_value # Output: 9এখানে, reduce মেথডটি অ্যারের মধ্যে সর্বোচ্চ মান (maximum value) বের করছে।
সারসংক্ষেপ
map: প্রতিটি উপাদানকে একটি নতুন মানে পরিবর্তন করে এবং একটি নতুন কোলেকশন রিটার্ন করে।select: কোলেকশন থেকে শর্ত পূর্ণ করা উপাদানগুলো নির্বাচন করে এবং একটি নতুন কোলেকশন তৈরি করে।reduce: কোলেকশনের সমস্ত উপাদানকে একত্রিত করে (যেমন যোগফল, গুণফল) একটি একক মানে রূপান্তর করে।
এই তিনটি মেথডই রুবিতে ফাংশনাল প্রোগ্রামিং কৌশল প্রয়োগে সহায়ক, এবং কোডকে আরও সংক্ষিপ্ত ও কার্যকরী করে তোলে।
Read more